﻿//* ==========================================================================
// Classe : Standards 
// Fonctions : Classe de fonctions pour applications Windows 
// 
// License:  License LGPL 
// Version :  0.01    du 13/07/2008 
// Lien : http://outils.codeplex.com 
// Auteur(s) : JF. PACORY
// CopyLeft: CopyLeft (>) 2008-2009 GlopSoft <contact@glopsoft.com>
// Création : 06/20/2009 16:19:29
// Etat : en cours
// Controle du :
// Licence : 
// L'autorisation est accordée, à titre gratuit, à toute personne d'obtenir une copie 
// de ce logiciel et de ses fichiers de documentation, pour pouvoir utiliser 
//ce logiciel sans restriction, y compris, sans s'y limiter, les droits 
// d'utiliser, de copier, de modifier, de fusionner, de publier, de distribuer, 
// de sous-licence, et / ou de vendre les copies du Logiciel, et d'autoriser les 
// personnes auxquelles le logiciel est livré de le faire, sous réserve des 
// conditions suivantes:
// 
// Les avis de droit d'auteur et la présente autorisation doivent être inclus dans 
// toutes les copies ou parties substantielles du Logiciel.
// 
// LE LOGICIEL EST FOURNI "TEL QUEL", SANS GARANTIE DE QUELQUE NATURE QUE CE SOIT, 
// EXPLICITE OU  IMPLICITE, Y COMPRIS, MAIS SANS Y LIMITER LES GARANTIES DE QUALITE 
// MARCHANDE, D'ADEQUATION A UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN 
// AUCUN CAS LES AUTEURS OU LES TITULAIRES DE DROITS D'AUTEUR POURRONT ETRE TENUE 
// RESPONSABLES DE TOUT DOMMAGE,  RÉCLAMATION OU AUTRE  RESPONSABILITE, DANS LE 
// CADRE D'UNE ACTION DE CONTRAT, UN DELIT OU AUTRE, DÉCOULANT DE, OU EN RELATION 
// AVEC LE LOGICIEL OU DE SON UTILISATION OU AUTRES EN RELATION AVEC LE LOGICIEL.
// Licence LGPL : http://commonlibrarynet.codeplex.com/license 
//*---------------------------------------------------------------------------
//
//* ==========================================================================

#region Références

using System;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
using System.Configuration;
using System.DirectoryServices;
using System.Xml;

using Outils.Globale;
using Outils.Constantes;

#endregion

namespace OutilsWin.Windows
{
    /// <summary>
    /// Classe de fonctions pour applications Windows
    /// </summary>
    public static class Standards
    {
        /// <summary>
        /// Méthode externe d'accès à l'aide
        /// </summary>
        [DllImport( "shell32.dll" )]     
        public static extern int ShellAbout( IntPtr hWnd, string szApp, string szOtherStuff, IntPtr hIcon );

        // ===================================================
        // Fonctions dialogues Windows pour les fichiers
        // ===================================================
        #region  Systeme d aide de l application
        /// <summary>
        /// Systeme d aide de l application
        /// </summary>
        /// <param name="sender">Composant émetteur</param>
        /// <param name="pNumero">numero du contexte</param>
        public static void Aide( Object sender, int pNumero )
        {
            try
            {
                // aide sur un item
                string numeroAide = pNumero.ToString();
                Globale.CheminApplication = Application.StartupPath;
                Help.ShowHelp( (Control)sender, Globale.RetourneNomFichierAide(), HelpNavigator.TopicId, numeroAide );
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        #region Choix dun dossier de destination
        /// <summary>
        /// Choix dun dossier de destination
        /// </summary> 
        public static string ChoixDossier()
        {
            try
            {
                FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
                if ( folderBrowserDialog.ShowDialog() == DialogResult.OK )
                {
                    string chemin = folderBrowserDialog.SelectedPath;
                    if ( !chemin.EndsWith( "\\" ) )
                        chemin += "\\";

                    return chemin;
                }
                else
                    return null;
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        #region Selection d un fichier
        /// <summary>
        /// Selection d un fichier
        /// </summary>
        /// <param name="initialDirectory"></param>
        /// <param name="filtre">
        ///  0 : .TXT
        ///  1 : .XML
        ///  2 : .CSV
        ///  9 : .*
        /// 99 : .*
        /// </param>
        /// <returns></returns>
        public static string SelectTextFile( string initialDirectory, byte filtre )
        {
            try
            {
                OpenFileDialog dialog = new OpenFileDialog();
                dialog.InitialDirectory = initialDirectory;
                dialog.Title = "Sélectionnez un fichier ";

                switch ( filtre )
                {
                    case 0:
                        dialog.Filter = "Fichiers Txt (*.txt)|*.txt|Tous les fichiers (*.*)|*.*";
                        dialog.Title += "texte";
                        break;
                    case 1:
                        dialog.Filter = "Fichiers CSV (*.csv)|*.csv|Tous les fichiers (*.*)|*.*";
                        dialog.Title += "délimité (CSV)";
                        break;
                    case 2:
                        dialog.Filter = "Fichiers XML (*.xml)|*.xml|Tous les fichiers (*.*)|*.*";
                        dialog.Title += "XML";
                        break;
                    case 9:
                        dialog.Filter = "Tous les fichiers (*.*)|*.*";
                        dialog.DefaultExt = "*.*";
                        break;
                    default:
                        dialog.Filter += "Tous les fichiers (*.*)|*.*";
                        break;
                }

                return ( dialog.ShowDialog() == DialogResult.OK )
                    ? dialog.FileName : null;
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        #region Selection d un fichier de destination
        /// <summary>
        /// Selection d un fichier de destination
        /// </summary>
        /// <param name="initialDirectory"></param>
        /// <param name="filtre">
        ///  0 : .TXT
        ///  1 : .XML
        ///  2 : .CSV
        ///  9 : .*
        /// 99 : .*
        /// </param>
        /// <returns></returns>
        public static string SaveTextFile( string initialDirectory, byte filtre )
        {
            try
            {
                SaveFileDialog dialog = new SaveFileDialog();
                dialog.InitialDirectory = initialDirectory;
                dialog.Title = "Enregistrer un fichier ";
                dialog.AddExtension = true;

                switch ( filtre )
                {
                    case 0:
                        dialog.Filter = "Fichiers Txt (*.txt)|*.txt|Tous les fichiers (*.*)|*.*";
                        dialog.Title += "texte";
                        dialog.DefaultExt = ".txt";
                        break;
                    case 1:
                        dialog.Filter = "Fichiers CSV (*.csv)|*.csv|Tous les fichiers (*.*)|*.*";
                        dialog.Title += "délimité (CSV)";
                        dialog.DefaultExt = ".csv";
                        break;
                    case 2:
                        dialog.Filter = "Fichiers XML (*.xml)|*.xml|Tous les fichiers (*.*)|*.*";
                        dialog.Title += "XML";
                        dialog.DefaultExt = ".xml";
                        break;
                    case 9:
                        dialog.Filter = "Tous les fichiers (*.*)|*.*";
                        dialog.DefaultExt = "*.*";
                        break;
                    default:
                        dialog.Filter += "Tous les fichiers (*.*)|*.*";
                        dialog.DefaultExt = ".txt";
                        break;
                }

                return ( dialog.ShowDialog() == DialogResult.OK )
                    ? dialog.FileName : null;
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        // ===================================================
        // Fonctions d'information et erreur
        // ===================================================

        #region Affiche un message pour les tests d action
        /// <summary>
        /// Affiche un message pour les tests d action
        /// </summary>
        /// <param name="_chaine">Chaine à afficher</param>
        public static void Test( string _chaine )
        {
            try
            {
#if(beta)
				Information( _chaine);
#endif
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        #region Fenetre d information
        /// <summary>
        /// Fenetre d information
        /// </summary>
        /// <param name="pInformation">chaine a afficher</param>
        public static void Information( string pInformation )
        {
            try
            {
                // Configure message box
                string caption = "Information";

                // Show message box
                MessageBox.Show( pInformation, caption, MessageBoxButtons.OK, MessageBoxIcon.Information );
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        #region Fenetre de questionnement oui non
        /// <summary>
        /// Fenetre de questionnement oui non
        /// </summary>
        /// <param name="_titre">titre</param>
        /// <param name="_texte">texte de la question</param>
        /// <returns></returns>
        public static bool Questionnement( string _texte, string _titre )
        {
            try
            {
                MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                DialogResult result;

                // Affichage du MessageBox.

                result = MessageBox.Show( _texte, _titre, buttons, MessageBoxIcon.Question );
                return ( result == System.Windows.Forms.DialogResult.Yes );
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }

        }
        #endregion

        #region Fenetre d avertissement
        /// <summary>
        ///  Fenetre d avertissement
        /// </summary>
        /// <param name="_titre">titre</param>
        /// <param name="_texte">texte de l avertissement</param>
        public static void Avertissement( string _texte, string _titre )
        {
            try
            {
                MessageBox.Show( _texte, _titre, MessageBoxButtons.OK, MessageBoxIcon.Exclamation );
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        #region Fenetre d exception
        /// <summary>
        ///  Fenetre d exception
        /// </summary>
        /// <param name="_titre">titre</param>
        /// <param name="_texte">texte de l avertissement</param>
        /// <param name="_message"></param>
        /// <param name="_classe"></param>
        /// <param name="_procedure"></param>
        public static void Erreur( string _texte, string _titre, string _message, string _classe, string _procedure )
        {
            try
            {
                /*
            string Projet = ApplParams.GetProjet();
            string Classe = srm.ReflectedType.FullName;
            string Methode = srm.Name;
                 */
                string stmp = "SQLCub     : " + _texte + Constante.Crlf + Constante.Crlf + "Référence : " + Constante.Crlf + Constante.Crlf + _message + Constante.Crlf + Constante.Crlf;
                stmp += "Classe    : " + _classe + Constante.Crlf + Constante.Crlf;
                stmp += "Procédure : " + _procedure + Constante.Crlf + Constante.Crlf;
                MessageBox.Show( stmp, _titre, MessageBoxButtons.OK, MessageBoxIcon.Error );
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        #region Exportation d un datagrid vers word
        /// <summary>
        /// Exportation d un datagrid vers word
        /// </summary>
        /// <param name="filename">Nom du fichier à générer</param>		
        public static void ExportToWord( String filename )
        {
            try
            {

                // Get the filename selected by the user
                string wordFilename = filename;

                //TODO :  à programmer
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        #region Exportation d un datagrid vers excel
        /// <summary>
        /// Exportation d un datagrid vers excel
        /// </summary>
        public static void ExporteVersExcel( String excelFilename )
        {
            // Export the details of specified columns
            try
            {
                // Get the datatable to export
                DataView myDv = new DataView();
                DataTable myDt = myDv.Table;

                // Specify the column list to export
                int[] iColumns = { 0, 1, 2, 3, 4, 5, 6 };
                string[] sHeaders = { "Name", "Author", "Content-type", "Created Date",
					"Last Modified Date", "Containing Folder", "Containing Project" };

                // Export the details of specified columns to Excel
                //TODO :  à programmer
            }
            catch ( Exception ex )
            {
                System.Windows.Forms.MessageBox.Show( "Test\n" + ex.Message );
            }
            finally
            {
            }
        }
        #endregion

        #region Ajoute une rangée de valeurs à un ListView
        /// <auteur>Master 2 CCI</auteur>
        /// <summary>Ajoute une rangée de valeurs à un ListView</description>
        /// <application>WINFIC</application>
        /// <creation>06/07/2008</creation>
        /// <param name="lvListe"></param>
        /// <param name="valeurs"></param>
        
        public static void AjouteVueListe( ListView lvListe, string[] valeurs )
        {
            try
            {
                ListViewItem lvItem = new ListViewItem( valeurs );
                lvListe.Items.Add( lvItem );
            }
            catch ( Exception ex )
            {
                throw ex;
            }
            finally
            {

            }
        }
        #endregion

        #region Exporte un ListView dans une chaine HTML : GetHtmlFromListView
        
        /// <summary>GetHtmlFromListView</description>
        /// <creation>31/07/2008</creation>
        /// <param name="listView"></param>
        /// <return>Chaine HTML</return>
                
        public static string GetHtmlFromListView( ListView listView )
        {
            int i;
            int j;
            string sTemp;
            string sHtml = "";
            sHtml = "<TABLE  WIDTH=\"95%\" BORDER=\"1\" BORDERCOLORLIGHT=\"#CCCCCC\"  BORDERCOLORDARK=\"#66CCFF\">" + Constante.Crlf;

            //    headers
            sHtml += "  <TR BGCOLOR=\"#CCCCFF\">" + Constante.Crlf;
            for ( i = 0; i < listView.Columns.Count; i++ )
            {
                sHtml += "    <TD><FONT FACE=\"Tahoma\"  SIZE=\"3\"><B>" + listView.Columns[ i ].Text + "</B></FONT></TD>" + Constante.Crlf;
            }
            sHtml = sHtml + "  </TR>" + Constante.Crlf;
            //    data
            for ( i = 0; i < listView.Items.Count; i++ )
            {
                sHtml = sHtml + "  <TR>" + Constante.Crlf;
                //sHtml = sHtml + "    <TD><FONT FACE=\"Tahoma\"  SIZE=\"2\">" + listView.Items[i].Text + "</FONT></TD>" + Constante.CRLF;
                for ( j = 0; j < listView.Columns.Count; j++ )
                {
                    sTemp = listView.Items[ i ].SubItems[ j ].Text;
                    if ( sTemp.Length == 0 )
                        sTemp = "&nbsp;";
                    sTemp = sTemp.Replace( "<", "&lt;" );
                    sTemp = sTemp.Replace( ">", "&gt;" );
                    sHtml = sHtml + "    <TD><FONT FACE=\"Tahoma\"  SIZE=\"2\">" + sTemp + "</FONT></TD>" + Constante.Crlf;
                }
                sHtml = sHtml + "  </TR>" + Constante.Crlf;
            }
            return sHtml + "</TABLE>" + Constante.Crlf;

            //    fin
        }
        #endregion

    }
}
